From f222d0363696fd70cad5722587ee58f57c76fec6 Mon Sep 17 00:00:00 2001 From: "smh22@tempest.cl.cam.ac.uk" Date: Fri, 31 Dec 2004 13:53:24 +0000 Subject: [PATCH] bitkeeper revision 1.1159.209.1 (41d559d4GzyJ3WvVnHx_oB2IlXZPuw) temporary fix for BIGLOCK deadlock & tools fix --- tools/libxc/xc_domain.c | 1 + xen/include/xen/sched.h | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c index 67168910e9..b29e4fc823 100644 --- a/tools/libxc/xc_domain.c +++ b/tools/libxc/xc_domain.c @@ -69,6 +69,7 @@ int xc_domain_pincpu(int xc_handle, dom0_op_t op; op.cmd = DOM0_PINCPUDOMAIN; op.u.pincpudomain.domain = (domid_t)domid; + op.u.pincpudomain.exec_domain = 0; op.u.pincpudomain.cpu = cpu; return do_dom0_op(xc_handle, &op); } diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 355faa43c1..f837daf9fb 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -87,12 +87,18 @@ struct exec_domain }; -#if 01 +/* +** SMH: do_mmu_update() grabs big_lock and subsequently can fault +** on map_ldt_shadow_page(), enter do_page_fault() and then deadlock +** trying to reacquire big_lock. A temporary fix is to make big_lock +** recursive; overall probably needs more thought. +*/ +#if 0 #define LOCK_BIGLOCK(_d) spin_lock(&(_d)->big_lock) #define UNLOCK_BIGLOCK(_d) spin_unlock(&(_d)->big_lock) #else -#define LOCK_BIGLOCK(_d) (void)(_d) -#define UNLOCK_BIGLOCK(_d) +#define LOCK_BIGLOCK(_d) spin_lock_recursive(&(_d)->big_lock) +#define UNLOCK_BIGLOCK(_d) spin_unlock_recursive(&(_d)->big_lock) #endif struct domain { -- 2.30.2